//package com.kin.bitmapcatching;
//
//import java.io.File;
//import java.io.IOException;
//import java.io.InputStream;
//import java.lang.ref.WeakReference;
//import java.net.MalformedURLException;
//import java.net.URL;
//import java.net.URLConnection;
//import java.util.ArrayList;
//
//import com.kin.bitmapcatching.DisplayBitmap.AsyncDrawable;
//import com.kin.bitmapcatching.DisplayBitmap.BitmapWorkerTask;
//import com.kin.bitmapcatching.DisplayBitmap.BitmapWorkerWithMemCacheTask;
//import com.kin.bitmapcatching.DisplayBitmap.ObserveCatching;
//import com.kin.bitmapcatching.ImageDownloader.BitmapDownloaderTask;
//
//import android.app.ActivityManager;
//import android.content.Context;
//import android.graphics.Bitmap;
//import android.graphics.BitmapFactory;
//import android.os.AsyncTask;
//import android.os.Environment;
//import android.support.v4.util.LruCache;
//import android.util.Log;
//import android.view.LayoutInflater;
//import android.view.View;
//import android.view.ViewGroup;
//import android.widget.BaseAdapter;
//import android.widget.ImageView;
//import android.widget.TextView;
//
//public class ListImageAdapter extends BaseAdapter implements ObserveCatching
//{
//	
//	private Context mContext;
//	private ArrayList<String> mListFileName;
//	private LayoutInflater mInflater;
//	private Bitmap mPlaceHolderBitmap;
//	private LruCache<String,Bitmap> memLruCache;
//	private DiskLruCache diskLruCache;
//	private static final int DISK_CACHE_SIZE = 1024 *1024 * 10;
//	private static final String DISK_CACHE_SUBDIR = "CacheImage";
//	
//	public ListImageAdapter(Context context,ArrayList<String> listFileName)
//	{
//		mContext = context ;
//		mListFileName = listFileName;
//		mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//		mPlaceHolderBitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.ic_launcher);
//		
//        final int memClass = ((ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass();
//        Log.d("Mem Class",memClass+"");
//        final int cacheSize = 1024*1024*memClass/8;
//        memLruCache = new LruCache<String,Bitmap>(cacheSize)
//        {
//			@Override
//			protected int sizeOf(String key, Bitmap value)
//			{
//				// TODO Auto-generated method stub
//				return value.getHeight() * value.getRowBytes();
//			}
//        };
//        
//        File cacheDir = getCacheDir(mContext, DISK_CACHE_SUBDIR);
//        diskLruCache = DiskLruCache.openCache(mContext, cacheDir, DISK_CACHE_SIZE);
//	}
//	
//	// Creates a unique subdirectory of the designated app cache directory. Tries to use external
//	// but if not mounted, falls back on internal storage.
//	public static File getCacheDir(Context context, String uniqueName) {
//	    // Check if media is mounted or storage is built-in, if so, try and use external cache dir
//	    // otherwise use internal cache dir
//	    final String cachePath = Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED
//	             ?
//	                    context.getExternalCacheDir().getPath() : context.getCacheDir().getPath();
//
//	    return new File(cachePath + File.separator + uniqueName);
//	}
//
//	@Override
//	public int getCount()
//	{
//		// TODO Auto-generated method stub
//		return mListFileName.size();
//	}
//
//	@Override
//	public Object getItem(int position)
//	{
//		// TODO Auto-generated method stub
//		return mListFileName.get(position);
//	}
//
//	@Override
//	public long getItemId(int position)
//	{
//		// TODO Auto-generated method stub
//		return 0;
//	}
//
//	@Override
//	public View getView(int position, View convertView, ViewGroup parent)
//	{
//		// TODO Auto-generated method stub
//		ViewHolder holder ;
//		if (convertView == null)
//		{
//			convertView = mInflater.inflate(R.layout.image_item, null);
//			holder = new ViewHolder();
//			holder.mImg = (ImageView)convertView.findViewById(R.id.imageThumbnail);
//			holder.mImgName = (TextView) convertView.findViewById(R.id.imageName);
//		}
//		else
//		{
//			holder = (ViewHolder) convertView.getTag();
//		}
//		
//		String filename=mListFileName.get(position);
//		File file = new File(filename);
//		loadBitmapWithMemCache(filename, holder.mImg);
//		holder.mImgName.setText(file.getName());
//		convertView.setTag(holder);
//		
//		return convertView;
//	}
//	
//	
//    private void loadBitmap(String fileName,ImageView imageView)
//    {
//    	if (DisplayBitmap.cancelPotentialWork(fileName, imageView))
//    	{
//    		DisplayBitmap displayBitmap = new DisplayBitmap(this);
//    		final BitmapWorkerTask task = displayBitmap.new BitmapWorkerTask(imageView,mContext);
//    		final AsyncDrawable asyncDrawable = new AsyncDrawable(mContext.getResources(),mPlaceHolderBitmap, task);
//    		imageView.setImageDrawable(asyncDrawable);
//    		task.execute(fileName);
//    	}
//    }
//    private void loadBitmapWithMemCache(String fileName,ImageView imageView)
//    {
//    	final String imageKey = String.valueOf(fileName);
//    	final Bitmap bitmap = getBitmapFromMemCache(imageKey);
//    	if (bitmap==null)
//    	{
//    		ImageDownloader imageDownloader = new ImageDownloader(mContext,this);
//    		final BitmapDownloaderTask task = imageDownloader.new BitmapDownloaderTask(imageView,mContext);
//    		imageView.setImageBitmap(mPlaceHolderBitmap);
//    		task.execute(fileName);
//    	}
//    	else
//    	{
//    		imageView.setImageBitmap(bitmap);
//    	}
//    }
//    
//    @Override
//    public void addBitmapToMemCache(String key,Bitmap bitmap)
//    {
//    	if (getBitmapFromMemCache(key)==null)
//    	{
//    		memLruCache.put(key, bitmap);
//    	}
//    	
//    	if (!diskLruCache.containsKey(key))
//    	{
//    		diskLruCache.put(key, bitmap);	
//    	}
//    }
//    
//    @Override
//    public Bitmap getBitmapFromMemCache(String key)
//    {
//    	return memLruCache.get(key);
//    }
//    
//    @Override
//    public Bitmap getBitmapFromDiskCache(String key) {
//    	return memLruCache.get(key);
//    }
//    
//	private class ViewHolder
//	{
//		public ImageView mImg;
//		public TextView mImgName;
//	}
//}
